/**
 * 一个节点下是否存在子节点
 *
 * @param parentTypeCode
 * @param list
 * @returns {boolean}
 */
function hasChild(parentTypeCode, list) {
  if (typeof list !== "object" || !list.length) {
    return false;
  }
  for (let i = 0; i < list.length; i += 1) {
    if (list[i] && list[i].parentTypeCode === parentTypeCode) {
      return true;
    }
  }
  return false;
}
/**
 * 检查字段是否存在
 * @param {*} key 值
 * @param {*} list 数据List
 */
export function checkList(key, list) {
  if (typeof list !== "object" || !list.length) {
    return true;
  }
  for (let i = 0; i < list.length; i += 1) {
    if (key === list[i].typeName && !hasChild(list[i].typeCode, list)) {
      return false;
    }
  }
  return true;
}

/**
 * 检查字段是否存在
 * @param {*} key 值
 * @param {*} list 数据List
 */
export function checkMultipleList(key, list) {
  const keyList = key.split(",");
  for (let i = 0; i < keyList.length; i += 1) {
    if (checkList(keyList[i], list)) {
      return true;
    }
  }
  return false;
}

/**
 * 是否电话号码
 * @param value
 */
export function checkPhone(value) {
  const regTel = /^0\d{2,3}?\d{7,8}$/;
  const regM = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
  if (value === "" || value === undefined || value === null) {
    return false;
  } else if (!regM.test(value) && !regTel.test(value)) {
    return true;
  }
  return false;
}

/**
 * 是否为移动电话
 * @param value
 */
export function checkMobilePhone(value) {
  const reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
  if (value === "" || value === undefined || value === null) {
    return false;
  } else if (!reg.test(value) && value !== "") {
    return true;
  }
  return false;
}

/**
 * 是否固话
 * @param value
 */
export function checkFixedNumber(value) {
  const reg = /^0\d{2,3}?\d{7,8}$/;
  if (value === "" || value === undefined || value === null) {
    return false;
  } else if (!reg.test(value) && value !== "") {
    return true;
  }
  return false;
}

/**
 * 是否身份证号码
 * @param value
 */
export function checkIdNumber(value) {
  const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  if (value === "" || value === undefined || value === null) {
    return true;
  } else if (!reg.test(value) && value !== "") {
    return true;
  }
  return false;
}

/**
 * 是否为数字
 * @param value 值
 */
export function checkNumber(value) {
  const reg = /^\d+(\.\d+)?$/;
  if (value === "" || value === undefined || value === null) {
    return true;
  } else if (!reg.test(value) && value !== "") {
    return true;
  }
  return false;
}

/**
 * 是否为正整数
 * @param value 值
 */
export function checkIntegerNumber(value) {
  const reg = /^[1-9]\d*$/;
  if (value === "" || value === undefined || value === null) {
    return true;
  } else if (!reg.test(value) && value !== "") {
    return true;
  } else if (value > 2147483647 || value < 0) {
    return true;
  }
  return false;
}

/**
 * 是否存在
 * @param value 值
 */
export function checkIsNull(value) {
  if (value === "" || value === undefined || value === null) {
    return true;
  }
  return false;
}

/**
 * 日期是否大于当前日期
 * @param value 值
 */
export function checkNowDate(value) {
  if (value === "" || value === undefined || value === null) {
    return false;
  } else if (value.length < 17 || value.length > 19) {
    return true;
  } else if (Number.isNaN(new Date(value).getTime())) {
    return true;
  } else if (new Date(value).getTime() < new Date().getTime()) {
    return true;
  }
  return false;
}

/**
 * 将多维数组对象降维
 * @param arrayObj 数组对象
 * @param result  结果值
 */
export function arrayObjectFlat(array, result) {
  if (typeof array !== "object") {
    return array;
  }
  let flatArray = result;
  for (let i in array) {
    flatArray.push({ typeCode: array[i].typeCode, typeName: array[i].typeName });
    arrayObjectFlat(array[i].children, flatArray);
  }
  return flatArray;
}

export default {
  checkList,
  checkMultipleList,
  checkPhone,
  checkIdNumber,
  checkNumber,
  checkIntegerNumber,
  arrayObjectFlat,
};
